<?php

/**
 * Framework
 * 
 * Конфигурационные данные передаются конструктору Framework_Config  в виде ассоциативного массива,
 * который может быть многомерным, что дает возможность организовывать данные от общего к частному.
 * Классы адаптеров (например Framework_Config_Ini) предназначены для того, чтобы преобразовать конфигурационные
 *  данные из хранилища в ассоциативный массив для конструктора Framework_Config.
 *  
 * Каждое значение массива конфигурационных значений становится свойством объекта Framework_Config. Ключ
 * массива используется как имя свойства. Если значение само является массивом, то соответствующее
 * свойство создается как объект Framework_Config, который заполняется данными этого массива. Это
 * производится рекурсивно, т.о., иерархия конфигурационных данных может иметь любой уровень вложенности.
 *  
 * @category   Framework
 * @package    Framework_Config
 */

Class Framework_Config
{
    /**
     * Содержит массив с конфигурационными данными.
     *
     * @var array
     */
    protected $_data = array();
    
    /**
     * Framework_Config
     *
     * @param array $array
     */
    public function __construct($array)
    {
        $this->_data = array();
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                $this->_data[$key] = new Framework_Config($value);
            } else {
                $this->_data[$key] = $value;
            }
        }
    }
    
    /**
     * Позволяет использовать конструкцию $obj->value.
     *
     * @param string $name
     * @return mixed
     */
    public function __get($name)
    {
        $result = '';
        if (array_key_exists($name, $this->_data)) {
            $result = $this->_data[$name];
        }
        return $result;
    }
    
    public function __set($key, $value)
    {
        if (array_key_exists($key, $this->_data)) {
            $this->_data[$key] = $value;
        }
    }
}
